package com.ruoyi.system.service.impl;

import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.BizFang;
import com.ruoyi.system.mapper.BizFangMapper;
import com.ruoyi.system.mapper.BizUserFangMapper;
import com.ruoyi.system.service.IBizFangService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 房源信息 服务层处理
 * 
 * @author ruoyi
 */
@Service
public class BizFangServiceImpl implements IBizFangService
{
    @Autowired
    private BizFangMapper fangMapper;

    @Autowired
    private BizUserFangMapper userFangMapper;

    /**
     * 查询房源信息集合
     * 
     * @param fang 房源信息
     * @return 房源信息集合
     */
    @Override
    public List<BizFang> selectFangList(BizFang fang)
    {
        return fangMapper.selectFangList(fang);
    }

    /**
     * 查询所有房源
     * 
     * @return 房源列表
     */
    @Override
    public List<BizFang> selectFangAll()
    {
        return fangMapper.selectFangAll();
    }

    /**
     * 通过房源ID查询房源信息
     * 
     * @param fangId 房源ID
     * @return 角色对象信息
     */
    @Override
    public BizFang selectFangById(Long fangId)
    {
        return fangMapper.selectFangById(fangId);
    }

    /**
     * 根据用户ID获取房源选择框列表
     * 
     * @param userId 用户ID
     * @return 选中房源ID列表
     */
    @Override
    public List<Long> selectFangListByUserId(Long userId)
    {
        return fangMapper.selectFangListByUserId(userId);
    }

    /**
     * 校验房源名称是否唯一
     * 
     * @param fang 房源信息
     * @return 结果
     */
    @Override
    public boolean checkFangNameUnique(BizFang fang)
    {
        Long fangId = StringUtils.isNull(fang.getFangId()) ? -1L : fang.getFangId();
        BizFang info = fangMapper.checkFangNameUnique(fang.getFangName());
        if (StringUtils.isNotNull(info) && info.getFangId().longValue() != fangId.longValue())
        {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
    }

    /**
     * 校验房源编码是否唯一
     * 
     * @param fang 房源信息
     * @return 结果
     */
    @Override
    public boolean checkFangCodeUnique(BizFang fang)
    {
        Long fangId = StringUtils.isNull(fang.getFangId()) ? -1L : fang.getFangId();
        BizFang info = fangMapper.checkFangCodeUnique(fang.getFangCode());
        if (StringUtils.isNotNull(info) && info.getFangId().longValue() != fangId.longValue())
        {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
    }

    /**
     * 通过房源ID查询房源使用数量
     * 
     * @param fangId 房源ID
     * @return 结果
     */
    @Override
    public int countUserFangById(Long fangId)
    {
        return userFangMapper.countUserFangById(fangId);
    }

    /**
     * 删除房源信息
     * 
     * @param fangId 房源ID
     * @return 结果
     */
    @Override
    public int deleteFangById(Long fangId)
    {
        return fangMapper.deleteFangById(fangId);
    }

    /**
     * 批量删除房源信息
     * 
     * @param postIds 需要删除的房源ID
     * @return 结果
     */
    @Override
    public int deleteFangByIds(Long[] postIds)
    {
        for (Long fangId : postIds)
        {
            BizFang fang = selectFangById(fangId);
            if (countUserFangById(fangId) > 0)
            {
                throw new ServiceException(String.format("%1$s已分配,不能删除", fang.getFangName()));
            }
        }
        return fangMapper.deleteFangByIds(postIds);
    }

    /**
     * 新增保存房源信息
     * 
     * @param fang 房源信息
     * @return 结果
     */
    @Override
    public int insertFang(BizFang fang)
    {
        return fangMapper.insertFang(fang);
    }

    /**
     * 修改保存房源信息
     * 
     * @param fang 房源信息
     * @return 结果
     */
    @Override
    public int updateFang(BizFang fang)
    {
        return fangMapper.updateFang(fang);
    }
}
